﻿using System.Runtime;
using System.Globalization;

namespace System.Reflection
{
    [NonScript]
    public abstract class FieldInfo : MemberInfo
    {
        public override MemberTypes MemberType
        {
            get { return MemberTypes.Field; }
        }

        public abstract RuntimeFieldHandle FieldHandle { get; }

        public abstract Type FieldType { get; }

        public abstract FieldAttributes Attributes { get; }

        public bool IsPublic
        {
            get { return false; }
        }

        public bool IsPrivate
        {
            get { return false; }
        }

        public bool IsFamily
        {
            get { return false; }
        }

        public bool IsAssembly
        {
            get { return false; }
        }

        public bool IsFamilyAndAssembly
        {
            get { return false; }
        }

        public bool IsFamilyOrAssembly
        {
            get { return false; }
        }

        public bool IsStatic
        {
            get { return false; }
        }

        public bool IsInitOnly
        {
            get { return false; }
        }

        public bool IsLiteral
        {
            get { return false; }
        }

        public bool IsNotSerialized
        {
            get { return false; }
        }

        public bool IsSpecialName
        {
            get { return false; }
        }

        public bool IsPinvokeImpl
        {
            get { return false; }
        }

        public virtual bool IsSecurityCritical
        {
            get { return false; }
        }

        public virtual bool IsSecuritySafeCritical
        {
            get { return false; }
        }

        public virtual bool IsSecurityTransparent
        {
            get { return false; }
        }

        public static FieldInfo GetFieldFromHandle(RuntimeFieldHandle handle)
        {
            return null;
        }

        public static FieldInfo GetFieldFromHandle(RuntimeFieldHandle handle, RuntimeTypeHandle declaringType)
        {
            return null;
        }

        [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
        protected FieldInfo()
        {
        }

        public static bool operator ==(FieldInfo left, FieldInfo right)
        {
            return false;
        }

        [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
        public static bool operator !=(FieldInfo left, FieldInfo right)
        {
            return !(left == right);
        }

        public override bool Equals(object obj)
        {
            return base.Equals(obj);
        }

        public override int GetHashCode()
        {
            return base.GetHashCode();
        }

        public virtual Type[] GetRequiredCustomModifiers()
        {
            return null;
        }

        public virtual Type[] GetOptionalCustomModifiers()
        {
            return null;
        }

        public abstract object GetValue(object obj);

        public virtual object GetRawConstantValue()
        {
            return null;
        }

        public abstract void SetValue(object obj, object value, BindingFlags invokeAttr, Binder binder, CultureInfo culture);

        public void SetValue(object obj, object value)
        {
        }
    }
}
